package com.ophiux.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.alibaba.csp.sentinel.annotation.SentinelResource;

/**
 * 说明：熔断降级规则<br>
 * 
 * 服务降级策略：
 * 1.rt(平均响应时间)  rt=10  时间窗口=2(2s后才能继续调用接口)  在1s秒，平均有5个请求的响应时间大于配置的10rt毫秒时间 阈值，则会执行一定时间窗口的熔断和降级。
 * 2.错误比例	当我们每秒的请求大于5的时候，会根据一定比例执行我们的熔断降级的策略。
 * 3.错误次数
 */
@RestController
public class SentinelDegradeRuleService {
	
	
	//平均响应时间   实现降级
	@SentinelResource(value = "getOrderDowngradeRtType", fallback = "getOrderDowngradeRtTypeFallback")
	@RequestMapping("/getOrderDowngradeRtType")
	public String getOrderDowngradeRtType() {
	    try {
	        Thread.sleep(500);
	    } catch (Exception e) { 
	    }
	    return "getOrderDowngradeRtType";
	}
	public String getOrderDowngradeRtTypeFallback() {
	    return "服务降级啦，当前服务器请求次数过多，请稍后重试!";
	}
	
	
	//异常的比例      异常的次数
	@SentinelResource(value = "getOrderDowngradeErrorType", fallback = "getOrderDowngradeErrorTypeFallback")
	@RequestMapping("/getOrderDowngradeErrorType")
	public String getOrderDowngradeErrorType(int age) {
	    int j = 1 / age;
	    return "正常执行我们的业务逻辑";
	}
	public String getOrderDowngradeErrorTypeFallback(int age) {
	    return "服务降级啦，当前服务器请求次数过多，请稍后重试!";
	}
}
